import request from '../utils/request'

/**
 * 获取字典数据
 * @param key 字典键名
 * @returns 字典数据
 */
export function getDictionaryByKey(key: string) {
  return request({
    url: `/api/dictionaries/show/${key}`,
    method: 'get',
  })
}

/**
 * 解析字典数据JSON
 * @param dataJson 字典JSON数据
 * @returns 解析后的对象
 */
export function parseDictionaryJson(dataJson: string | object) {
  try {
    if (typeof dataJson === 'object') {
      return dataJson
    }

    if (typeof dataJson === 'string') {
      // 修复可能的JSON格式问题（缺少引号等）
      // 1. 先尝试直接解析
      try {
        return JSON.parse(dataJson)
      } catch (error) {
        // 2. 如果直接解析失败，尝试修复常见格式问题

        // 特殊处理"endTime:"缺少引号的情况
        let fixedJson = dataJson.replaceAll(/,\s*endTime:/g, ',"endTime":')

        // 处理其他可能缺少引号的键
        fixedJson = fixedJson
          // 只匹配没有前导双引号的键名，添加双引号
          .replaceAll(/([,{]\s*)(\w+):/g, '$1"$2":')
          // 修复可能重复添加的引号
          .replaceAll(/"{2,}/g, '"')

        try {
          return JSON.parse(fixedJson)
        } catch {
          // 3. 如果依然失败，尝试最后的手动解析方案
          console.warn('JSON修复后仍然无法解析，尝试手动提取', dataJson)

          // 使用正则表达式直接提取startTime和endTime的值
          const startTimeMatch = dataJson.match(/startTime["':]?["']*([\d:]+)["']*/)
          const endTimeMatch = dataJson.match(/endTime["':]?["']*([\d:]+)["']*/)

          const result: any = {}

          if (startTimeMatch && startTimeMatch[1]) {
            result.startTime = startTimeMatch[1]
          }

          if (endTimeMatch && endTimeMatch[1]) {
            result.endTime = endTimeMatch[1]
          }

          // 如果至少提取到一个值，返回结果
          if (Object.keys(result).length > 0) {
            return result
          }

          // 所有方法都失败，抛出原始异常
          throw error
        }
      }
    }

    return null
  } catch (error) {
    console.error('解析字典数据出错:', error)
    // 返回默认值以避免应用崩溃
    return {
      startTime: '08:00',
      endTime: '18:00',
    }
  }
}
